package sessionbeans;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import model.Cotizacion;
import model.ItemCotizacion;

/**
 * Session Bean implementation class AdministradorCotizacionesBean
 */
@Stateless
public class AdministradorCotizacionesBean implements AdministradorCotizaciones {

	@PersistenceContext(unitName = "OficinaVentasPU")
	private EntityManager em;

	/**
	 * Default constructor.
	 */
	public AdministradorCotizacionesBean() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void altaCotizacion(Cotizacion cotizacion) {
		em.persist(cotizacion);
		System.out.println("Persistida la cotizacion ");

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ItemCotizacion> obtenerItemsCotizacionesVigentesDeClientePorId(
			Integer idCliente) {

		String q = "select c from Cotizacion c where c.cliente.id = :idCliente";
		Query query = em.createQuery(q);
		query.setParameter("idCliente", idCliente);
		List<Cotizacion> cotizaciones = query.getResultList();
		List<ItemCotizacion> items = new ArrayList<ItemCotizacion>();

		for (Cotizacion cotizacion : cotizaciones) {
			if (this.esCotizacionVigente(cotizacion)) {
				items.addAll(cotizacion.getListaItemCotizacion());
			}
		}

		return items;// Devuelvo todos los items vigentes de ese cliente
	}

	private boolean esCotizacionVigente(Cotizacion cotizacion) {
		GregorianCalendar gCalendarCot = new GregorianCalendar();
		gCalendarCot.setTimeInMillis(cotizacion.getFechaemision());
		gCalendarCot.add(Calendar.DATE, cotizacion.getVigencia());

		// si la fecha es posterior a la actual, esta vigente
		return gCalendarCot.after(new GregorianCalendar());
	}

}
